package com.qckj.amz.service;

import com.qckj.amz.domain.ProductFmlRlat;
import com.qckj.common.core.domain.AjaxResult;
import org.springframework.data.domain.Page;

import java.util.List;
import java.util.Map;

/**
 * 产品关系Service接口
 *
 * @author luchuan
 * @since 1.0 2021-12-24
 */
public interface IProductFmlRlatService {
    /**
     * 查询产品关系
     *
     * @param id 产品关系ID
     * @return 产品关系
     */
    ProductFmlRlat findById(Long id);

    /**
     * 分页查询产品关系列表
     *
     * @param req 产品关系
     * @return 产品关系集合
     */
    Page<ProductFmlRlat> findProductFmlRlatPage(ProductFmlRlat req);

    /**
     * 查询产品关系列表
     *
     * @param req 产品关系
     * @return 产品关系集合
     */
    List<ProductFmlRlat> findProductFmlRlatList(ProductFmlRlat req);

    /**
     * 新增产品关系
     *
     * @param productFmlRlat 产品关系
     * @return 结果
     */
    void save(ProductFmlRlat productFmlRlat);

    /**
     * 批量删除产品关系
     *
     * @param ids 需要删除的产品关系ID
     * @return 结果
     */
    void deleteByIds(List<Long> ids);

    /**
     * 删除产品关系信息
     *
     * @param id 产品关系ID
     * @return 结果
     */
    void deleteProductFmlRlatById(Long id);

    /**
     * 创建产品关系
     * @param productCode
     * @param variationTheme
     * @param colorName
     * @param sizeName
     * @return
     */
    AjaxResult createRlat(String productCode, String variationTheme, List<String> colorName, List<String> sizeName);

    /**
     * 通过产品代码获取变体集合
     * @param productCode
     * @return
     */
    AjaxResult getListByProductCode(String productCode);

    /**
     * 保存当前新增和修改的变体记录
     * @param addAndUpdateRlatMap  当前产品代码的所有新增和修改，前端封存参数如下
     * @param productCode           产品代码
     * @return
     */
    AjaxResult updateRowsRlat(Map<String,List<ProductFmlRlat>> addAndUpdateRlatMap, String productCode);

    /**
     * 删除当前修改变体记录
     * @param rlatList
     * @return
     */
    AjaxResult deleteRowsRlat(List<Map<String, Object>> rlatList);

    /**
     *
     * @param productCode
     * @param idKey
     * @param eventSign     点击事件标记：1清空主图；2清空附图；3删除主图-单个；4删除附图-单个
     * @param imageUrl
     * @return
     */
    AjaxResult deleteImageUrl(String productCode, String idKey, Integer eventSign, String imageUrl);

    /**
     * 上传图片处理
     *
     * @param productCode   产品代码
     * @param idKey         操作选中产品的主键id
     * @param eventSign     点击事件标记：1上传主图；2上传附图；3上传主图-单个变体；4上传附图-单个变体
     * @param imgList       选中的图片数组
     * @return
     */
    AjaxResult handleUploadImage(String productCode, String idKey, Integer eventSign, List<String> imgList);

    /**
     * 通过productCode删除产品相关数据
     * @param productCodeList
     */
    void deleteByProductCodes(List<String> productCodeList);

    /**
     *  生成UPC/EAN
     * @param productCode                       产品代码
     * @return
     */
    AjaxResult generateExternalProductId(String productCode);
}
